有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java日程表每日报警管理器

我在设置Android AlarmManager以每天执行时遇到一些问题。 用户可以设置自己的具体时间,并且应该每天在这个时间运行。 代码如下:

@Override
protected void onResume() {
    super.onResume();

    Intent intent = new Intent(MainActivity.this,
            NotificationBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getService(
            MainActivity.this, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    // Make sure, there is no active Alarm
    alarmManager.cancel(pendingIntent);

    if(notificationEnabled) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.AM_PM, Calendar.PM);

        cal.set(Calendar.HOUR_OF_DAY, notificationHour);
        cal.set(Calendar.MINUTE, notificationMinute);
        cal.set(Calendar.SECOND, 0);


        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }

}

现在我不明白,为什么这行不通。有一次我把闹钟调到10:05,闹钟在晚上响了。警报应在每天的特定时间触发(当然,如果仅启用)。从当天开始。因此,如果我将它设置为几分钟或几小时后,它也应该在今天和每隔一天运行,直到我取消警报#

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    我想你从日历上得到了一个错误的Unixtimestamp

    试试这个

    // Set the alarm to start at approximately 2:00 p.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 14);
    
    // With setInexactRepeating(), you have to use one of the AlarmManager interval
    // constants in this case, AlarmManager.INTERVAL_DAY.
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, alarmIntent);
    

    From Android Trainigs Scheduling Repeating Alarms